package com.hit.serviceBase.exceptionHandler;

import com.hit.commonUtils.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

//全局、特定、自定义异常统一异常处理类，这样调用服务出现异常时，可以返回统一的error或ok的状态码等，而不是responseBody是状态码500及异常信息
@ControllerAdvice
@Slf4j//把出现的异常的日志保存到文件中
public class GlobalExceptionHandler {

    //指定出现什么异常时执行这个方法
    @ExceptionHandler(Exception.class)
    @ResponseBody//为了返回数据---之前在EduTeacherController类中因为有@RestController标签所以数据才能够返回，所以这里需要加@ResponseBody注解
    public R error(Exception e){
        e.printStackTrace();
        return R.error().message("执行了全局异常处理...");
    }
    //出现特定异常时执行这个方法
    @ExceptionHandler(ArithmeticException.class)
    @ResponseBody//为了返回数据---之前在EduTeacherController类中因为有@RestController标签所以数据才能够返回，所以这里需要加@ResponseBody注解
    public R error(ArithmeticException e){
        e.printStackTrace();
        return R.error().message("执行了ArithmeticException异常处理...");
    }
    //出现自定义异常时执行这个方法
    @ExceptionHandler(MyException.class)
    @ResponseBody//为了返回数据---之前在EduTeacherController类中因为有@RestController标签所以数据才能够返回，所以这里需要加@ResponseBody注解
    public R error(MyException e){
        e.printStackTrace();
        log.error(e.getMessage());//getMessage是返回异常的错误信息  getMsg是返回json的提示错误信息
        return R.error().code(e.getCode()).message(e.getMsg());
    }
}
